package app.vista;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import org.jdesktop.application.Application;
import exceptions.ProductoException;
import beans.ProductoVO;
import app.Administracion;
import app.Defines;


@SuppressWarnings("serial")
public class ProductoGUI extends JInternalFrame 
{
	
    private String title;
    @SuppressWarnings("unused")
	private Administracion sistema;
	private JTextField txt_id_producto;
	private JTextField txt_nombre;
	private JTextField txt_descripcion;
	private JTextField txt_precioVenta;
	private JTextField txt_tipo;

	private JLabel label_id_producto;
	private JLabel label_nombre;
	private JLabel label_descripcion;
	private JLabel label_precioVenta;
	private JLabel label_tipo;
	
	private JButton btnBuscar;
	private JButton btnCancelar;
	private JButton btnConfirmar;

	private boolean isAltaProducto = false;
	private boolean isBajaProducto = false;
	private boolean isModProducto = false;
	private MenuPrincipalView menuPrincipal;
	
	public ProductoGUI(String sTitle, Administracion sys,  MenuPrincipalView mp) 
	{
		super(sTitle);
		this.sistema = sys;
		this.title = sTitle;
		this.menuPrincipal = mp;
		initGUI();
	}
	
   public static ProductoGUI getInstancia(String sTitle, Administracion sys, MenuPrincipalView mp)
   {
	   return new ProductoGUI(sTitle, sys,mp);
   }
	
	private void initGUI() 
	{
		try 
		{
			this.setPreferredSize(new java.awt.Dimension(696, 253));
	      	this.setBounds(0, 0, 696, 253);
	      	setVisible(true);
	      	setLocation(550, 150);
	       	setTitle(this.title);
	       	setClosable(true);
	       	setSize(304, 253);
	       	setMaximumSize(new Dimension(304, 253));
	       	setMinimumSize(new Dimension(304, 253));
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			
			label_id_producto = new JLabel();
			getContentPane().add(label_id_producto);
			label_id_producto.setText("Id Producto:");
			label_id_producto.setBounds(54, 17, 85, 16);

			txt_id_producto = new JTextField();
			getContentPane().add(txt_id_producto);
			txt_id_producto.setBounds(167, 14, 193, 23);

			label_nombre = new JLabel();
			getContentPane().add(label_nombre);
			label_nombre.setText("Nombre:");
			label_nombre.setBounds(54, 52, 47, 16);
			
			txt_nombre = new JTextField();
			getContentPane().add(txt_nombre);
			txt_nombre.setBounds(167, 49, 193, 23);

			label_descripcion = new JLabel();
			getContentPane().add(label_descripcion);
			label_descripcion.setText("Descripcion:");
			label_descripcion.setBounds(54, 87, 68, 16);
			
			txt_descripcion = new JTextField();
			getContentPane().add(txt_descripcion);
			txt_descripcion.setBounds(167, 84, 193, 23);

			label_precioVenta = new JLabel();
			getContentPane().add(label_precioVenta);
			label_precioVenta.setText("Precio Venta:");
			label_precioVenta.setBounds(54, 122, 85, 16);
			
			txt_precioVenta = new JTextField();
			getContentPane().add(txt_precioVenta);
			txt_precioVenta.setBounds(167, 119, 193, 23);

			label_tipo = new JLabel();
			getContentPane().add(label_tipo);
			label_tipo.setText("Tipo:");
			label_tipo.setBounds(54, 157, 47, 16);
			
			txt_tipo = new JTextField();
			getContentPane().add(txt_tipo);
			txt_tipo.setBounds(167, 154, 193, 23);

			btnBuscar = new JButton();
			getContentPane().add(btnBuscar);
			btnBuscar.setText("Buscar");
			btnBuscar.setBounds(390, 13, 116, 23);
			btnBuscar.setName("btnBuscar");
			btnBuscar.addActionListener(new ActionListener() 
			{
				public void actionPerformed(ActionEvent evt) 
				{
					btnBuscarActionPerformed(evt);
				}
			});
			btnConfirmar = new JButton();
			getContentPane().add(btnConfirmar);
			btnConfirmar.setText("Confirmar");
			btnConfirmar.setBounds(390, 295, 116, 23);
			btnConfirmar.addActionListener(new ActionListener() 
			{
				public void actionPerformed(ActionEvent evt) 
				{
					btnConfirmarActionPerformed(evt);
				}
			});
			btnCancelar = new JButton();
			getContentPane().add(btnCancelar);
			btnCancelar.setText("Cancelar");
			btnCancelar.setBounds(390, 329, 116, 23);
			btnCancelar.addActionListener(new ActionListener() 
			{
				public void actionPerformed(ActionEvent evt) 
				{
					cancelarActionPerformed(evt);
				}
			});

	       if (title.equals(Defines.altaProducto)) 
	       {
				isAltaProducto = true;
				screenDisabledMode();
	        	
	    		//JText
	    		txt_id_producto.setVisible(true);
	    		txt_nombre.setVisible(true);
	    		txt_descripcion.setVisible(true);
	    		txt_precioVenta.setVisible(true);
	    		txt_tipo.setVisible(true);

	    		//JLabel
	    		label_id_producto.setVisible(true);
	    		label_nombre.setVisible(true);
	    		label_descripcion.setVisible(true);
	    		label_precioVenta.setVisible(true);
	    		label_tipo.setVisible(true);
	    		
	    		//JButton
	    		btnBuscar.setVisible(false);
	    		btnCancelar.setVisible(true);
	    		btnConfirmar.setVisible(true);
			}
	        if (title.equals(Defines.bajaProducto)) 
	        {
	        	isBajaProducto = true;
	        	screenDisabledMode();
	        	
	        	//JText
	    		txt_id_producto.setVisible(true);
	    		txt_nombre.setVisible(true);
	    		txt_descripcion.setVisible(true);
	    		txt_precioVenta.setVisible(true);
	    		txt_tipo.setVisible(true);

	    		//JLabel
	    		label_id_producto.setVisible(true);
	    		label_nombre.setVisible(true);
	    		label_descripcion.setVisible(true);
	    		label_precioVenta.setVisible(true);
	    		label_tipo.setVisible(true);
	    		
	    		//JButton Visible
	    		btnBuscar.setVisible(true);
	    		btnCancelar.setVisible(true);
	    		btnConfirmar.setVisible(false);
	    		
	        	//JText
	    		txt_id_producto.setEditable(true);
	    		txt_nombre.setEditable(false);
	    		txt_descripcion.setEditable(false);
	    		txt_precioVenta.setEditable(false);
	    		txt_tipo.setEditable(false);

	       }
	       if (title.equals(Defines.modifProducto)) 
	       {
	        	isModProducto = true;
	        	screenDisabledMode();
	        	
	        	//JText
	    		txt_id_producto.setVisible(true);
	    		txt_nombre.setVisible(true);
	    		txt_descripcion.setVisible(true);
	    		txt_precioVenta.setVisible(true);
	    		txt_tipo.setVisible(true);

	    		//JLabel
	    		label_id_producto.setVisible(true);
	    		label_nombre.setVisible(true);
	    		label_descripcion.setVisible(true);
	    		label_precioVenta.setVisible(true);
	    		label_tipo.setVisible(true);
	    		
	    		//JButton Visible
	    		btnBuscar.setVisible(true);
	    		btnCancelar.setVisible(true);
	    		btnConfirmar.setVisible(false);
	    		
	        	//JText
	    		txt_id_producto.setEditable(true);
	    		txt_nombre.setEditable(false);
	    		txt_descripcion.setEditable(false);
	    		txt_precioVenta.setEditable(false);
	    		txt_tipo.setEditable(false);

	       }
			pack();
			this.setSize(550, 424);
			Application.getInstance().getContext().getResourceMap(getClass()).injectComponents(this);
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}
	}
	private void screenDisabledMode()
	{
		//JText
		txt_id_producto.setVisible(false);
		txt_nombre.setVisible(false);
		txt_descripcion.setVisible(false);
		txt_precioVenta.setVisible(false);
		txt_tipo.setVisible(false);

		//JLabel
		label_id_producto.setVisible(false);
		label_nombre.setVisible(false);
		label_descripcion.setVisible(false);
		label_precioVenta.setVisible(false);
		label_tipo.setVisible(false);
		
		//JButton
		btnBuscar.setVisible(false);
		btnCancelar.setVisible(false);
		btnConfirmar.setVisible(false);

	}

	private void btnConfirmarActionPerformed(ActionEvent evt) 
	{
	///VALIDACIONES
		if(validarDatosConfirmar())
		{
			if (isAltaProducto) 
			{
				ProductoVO prodVO = new ProductoVO();
				prodVO.setNombre(txt_nombre.getText());
				prodVO.setDescripcion(txt_descripcion.getText());
				prodVO.setPrecioVenta(Float.parseFloat(txt_precioVenta.getText()));
				prodVO.setTipo(txt_tipo.getText());
				try 
				{
					Administracion.getInstancia().agregarProducto(prodVO);
				} 
				catch (ProductoException e) 
				{
					e.printStackTrace();
				}
			}
			if(isBajaProducto)
			{
				try 
				{
					Administracion.getInstancia().bajaProd(txt_id_producto.getText());
				} 
				catch (ProductoException e) 
				{
					e.printStackTrace();
				}
				btnBuscar.setEnabled(true);
				btnConfirmar.setVisible(true);
				btnConfirmar.setEnabled(false);
			}
			if(isModProducto)
			{
				ProductoVO prodVO = new ProductoVO();
				prodVO.setNombre(txt_nombre.getText());
				prodVO.setDescripcion(txt_descripcion.getText());
				prodVO.setPrecioVenta(Float.parseFloat(txt_precioVenta.getText()));
				prodVO.setTipo(txt_tipo.getText());
				try 
				{
					Administracion.getInstancia().modifProd(prodVO);
				} 
				catch (ProductoException e) 
				{
					e.printStackTrace();
				}
				btnBuscar.setEnabled(true);
				btnConfirmar.setEnabled(false);
			}
		}
		menuPrincipal.refreshTables();
	}
	
	private void btnBuscarActionPerformed(ActionEvent evt) 
	{
		if(validarDatosBuscar())
		{
			if (isBajaProducto) 
			{
				ProductoVO c = Administracion.getInstancia().buscarProductoVO(txt_id_producto.getText());
				if(c != null)
				{
					txt_id_producto.setEditable(false);
		    		txt_nombre.setText(c.getNombre());
		    		txt_descripcion.setText(c.getDescripcion());
		    		txt_precioVenta.setText(String.valueOf(c.getPrecioVenta()));
		    		txt_tipo.setText(c.getTipo());
		    		
		    		txt_id_producto.setEditable(false);
		    		txt_nombre.setEditable(false);
		    		txt_descripcion.setEditable(false);
		    		txt_precioVenta.setEditable(false);
		    		txt_tipo.setEditable(false);
		    		
					btnBuscar.setVisible(false);
					btnConfirmar.setVisible(true);
					btnConfirmar.setVisible(true);
				}
			}
			if(isModProducto)
			{
				ProductoVO c = Administracion.getInstancia().buscarProductoVO(txt_id_producto.getText());
				if(c != null)
				{
					txt_id_producto.setEditable(false);
		    		txt_nombre.setText(c.getNombre());
		    		txt_descripcion.setText(c.getDescripcion());
		    		txt_precioVenta.setText(String.valueOf(c.getPrecioVenta()));
		    		txt_tipo.setText(c.getTipo());
		    		
		    		txt_id_producto.setEditable(true);
		    		txt_nombre.setEditable(true);
		    		txt_descripcion.setEditable(true);
		    		txt_precioVenta.setEditable(true);
		    		txt_tipo.setEditable(true);
		    		
					btnBuscar.setVisible(false);
					btnConfirmar.setVisible(true);
					btnConfirmar.setVisible(true);
				}
			}
		}
	}
	
	private boolean validarDatosBuscar() 
	{
		try 
		{
			Integer.parseInt(txt_id_producto.getText());
		}
		catch(NumberFormatException n) {
			JOptionPane.showMessageDialog(null, "El campo CodigoCeral es numerico", title, JOptionPane.ERROR_MESSAGE);
			return false;
		}
		return true;
	}

	private boolean validarDatosConfirmar() 
	{
		try 
		{
			Integer.parseInt(txt_id_producto.getText());
		}
		catch(NumberFormatException n) 
		{
			JOptionPane.showMessageDialog(null, "El campo id es numerico", title, JOptionPane.ERROR_MESSAGE);
			return false;
		}
		return true;
	}
	
	private void cancelarActionPerformed(ActionEvent evt) 
	{
		this.dispose();
	}
}